#include <string.h>
#include <iostream>
using std::cout;
using std::endl;
class Obj{
public:
    Obj(const char * name)
    :_name(new char[strlen(name) + 1]())
    {
        strcpy(_name, name);
        cout << "Obj(" << _name << ")" << endl;
    }

    ~Obj(){
        cout << "~Obj(" << _name << ")" <<endl;
        if(_name){
            delete [] _name;
            _name = nullptr;
        }
    }

private:
    char * _name;
};

//创建若干个不同类型的对象
//全局对象、局部对象、静态对象、堆对象
//全局对象：程序开始运行便会创建出全局对象;程序即将结束之前
//局部对象：调用了创建对象的语句,出了局部作用域便会销毁
//静态对象：如果存放在全局位置，那么和全局对象一致，如果存放在
//局部作用域内，那么执行到这行代码时，创建该对象;程序即将结束时
//才会销毁静态对象
//堆对象：new的时候会创建该对象，delete的时候会销毁
//是由程序员自主控制的
Obj globalObj("global");
void test(){
    Obj localObj("localObj");
    static Obj staticObj("static");
    Obj * p = new Obj("heapObj");

    delete p;
}

int main()
{
    test();
    cout << "main(.....)" << endl;
    return 0;
}

